package com.qn.common.core.constant.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 结果信息枚举
 *
 * @author Qning
 * @date 2021/12/22
 */
@Getter
@AllArgsConstructor
public enum ResultCodeEnum {
    SUCCESS(true, 20000, "成功"),

    UNKNOWN_ERROR(false, 30001, "未知错误"),

    PARAM_ERROR(false, 30002, "参数错误"),

    NULL_POINTER(false, 30003, "空指针异常"),
    SQL_EXCEPTION(false, 30004, "sql执行异常"),
    DUPLICATE_KEY(false, 30005, "关键字重复"),
    NOTFOUND_USER(false, 30006, "用户名不存在"),
    UNMATCH_UNAME_PWD(false, 30006, "用户名或密码错误"),

    JWT_EXPIRED(false, 31001, "JWT验证失败:token已经过期"),
    JWT_UNSUPPORTED(false, 31001, "JWT验证失败:token格式不支持"),
    JWT_MALFORMED(false, 31001, "JWT验证失败:token格式错误"),
    JWT_SIGNATURE(false, 31001, "JWT验证失败:token签名错误"),
    JWT_ILLEGAL_ARGUMENT(false, 31001, "JWT验证失败:token非法参数"),

    /**
     * sa-token
     */
    SA_TOKEN_NOT_GIVEN(false, 31000, "sa-token验证失败:未提供token"),
    SA_TOKEN_INVALID(false, 31001, "sa-token验证失败:token无效"),
    SA_TOKEN_EXPIRED(false, 31002, "sa-token验证失败:token已过期"),
    SA_TOKEN_BE_REPLACED(false, 31003, "sa-token验证失败:token已被顶下线"),
    SA_TOKEN_KICK_OUT(false, 31004, "sa-token验证失败:token已被踢下线"),
    SA_TOKEN_NOT_LOGGED(false, 31005, "sa-token验证失败:当前会话未登录"),
    SA_TOKEN_NOT_ROLE(false, 31006, "无此角色："),
    SA_TOKEN_NOT_PERMISSION(false, 31007, "无此权限："),
    SA_TOKEN_DISABLE_LOGIN(false, 31008, "账号被封禁："),

    /**
     * member module
     */
    EXISTED_USER(false, 41000, "用户已存在"),
    INCORRECT_OPTCODE(false, 41001, "验证码未过期"),
    UNMATCH_OPTCODE(false, 41002, "验证码不匹配"),
    UNAUTHORIZED(false, 41003, "未登录或token已经过期"),
    AUTHORIZATION_HEADER_IS_EMPTY(false, 41004, "请求头无授权信息"),
    AUTHORIZATION_INVALID(false, 41005, "无效的token信息"),
    TOKEN_EXPIRED(false, 41006, "token已过期"),
    ACCESS_FORBIDEN(false, 41007, "没有访问权限"),

    /**
     * wechat pay
     */
    WXPAY_INSTANCE_CREATE_FAIL(false, 51001, "微信支付实例创建失败"),
    WXPAY_REQUEST_FAILED(false, 51002, "微信支付接口请求失败"),
    WXPAY_FETCH_TOKEN_FAILED(false, 51003, "微信公众号获取access token失败"),
    ALIPAY_CALLBACK_CHECK_FAILED(false, 52001, "支付宝支付回调结果验签失败"),

    /**
     * 短信框架的错误码枚举
     */
    SMS_UNKNOWN(false, 2001000000, "未知错误，需要解析"),

    // ========== 权限 / 限流等相关 2001000100 ==========
    SMS_PERMISSION_DENY(false, 2001000100, "没有发送短信的权限"),

    // 云片：可以配置 IP 白名单，只有在白名单中才可以发送短信
    SMS_IP_DENY(false, 2001000100, "IP 不允许发送短信"),

    // 阿里云：将短信发送频率限制在正常的业务限流范围内。默认短信验证码：使用同一签名，对同一个手机号验证码，支持 1 条 / 分钟，5 条 / 小时，累计 10 条 / 天。
    SMS_SEND_BUSINESS_LIMIT_CONTROL(false, 2001000102, "指定手机的发送限流"),
    // 阿里云：已经达到您在控制台设置的短信日发送量限额值。在国内消息设置 > 安全设置，修改发送总量阈值。
    SMS_SEND_DAY_LIMIT_CONTROL(false, 2001000103, "每天的发送限流"),

    SMS_SEND_CONTENT_INVALID(false, 2001000104, "短信内容有敏感词"),

    // ========== 模板相关 2001000200 ==========
    SMS_TEMPLATE_INVALID(false, 2001000200, "短信模板不合法"), // 包括短信模板不存在
    SMS_TEMPLATE_PARAM_ERROR(false, 2001000201, "模板参数不正确"),

    // ========== 签名相关 2001000300 ==========
    SMS_SIGN_INVALID(false, 2001000300, "短信签名不可用"),

    // ========== 账户相关 2001000400 ==========
    SMS_ACCOUNT_MONEY_NOT_ENOUGH(false, 2001000400, "账户余额不足"),
    SMS_ACCOUNT_INVALID(false, 2001000401, "apiKey 不存在"),

    // ========== 其它相关 2001000900 开头 ==========
    SMS_API_PARAM_ERROR(false, 2001000900, "请求参数缺失"),
    SMS_MOBILE_INVALID(false, 2001000901, "手机格式不正确"),
    SMS_MOBILE_BLACK(false, 2001000902, "手机号在黑名单中"),

    EXCEPTION(false, 2001000999, "调用异常");

    /**
     * 响应是否成功
     */
    private final Boolean success;
    /**
     * 响应状态码
     */
    private final Integer code;
    /**
     * 响应信息
     */
    private final String message;
}
